css: Add a :checked pseudoclass
authorBenjamin Otte <otte@redhat.com>
Thu, 14 Aug 2014 01:00:02 +0000 (03:00 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 16 Aug 2014 14:34:14 +0000 (16:34 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=733967

gtk/gtkcssselector.c
gtk/gtkenums.h
gtk/gtkwidget.c
gtk/gtkwidgetpath.c
testsuite/css/parser/pseudo-classes-known.css
testsuite/css/parser/pseudo-classes-known.ref.css

index ca9c45dfb6a9da8de60a9870beb96528e0df198a..bfa8da034d25452fc2e054479c6158bcd277b4fe 100644 (file)
@@ -1111,7 +1111,8 @@ gtk_css_selector_pseudoclass_state_print (const GtkCssSelector *selector,
     "dir(ltr)",
     "dir(rtl)",
     "link",
-    "visited"
+    "visited",
+    "checked"
   };
   guint i, state;
 
@@ -1831,7 +1832,8 @@ parse_selector_pseudo_class (GtkCssParser   *parser,
     { "dir(ltr)",     GTK_STATE_FLAG_DIR_LTR, },
     { "dir(rtl)",     GTK_STATE_FLAG_DIR_RTL, },
     { "link",         GTK_STATE_FLAG_LINK, },
-    { "visited",      GTK_STATE_FLAG_VISITED, }
+    { "visited",      GTK_STATE_FLAG_VISITED, },
+    { "checked",      GTK_STATE_FLAG_CHECKED, }
   };
   guint i;
 
index aa893d6b402e1f9ac9bbe283c2d547a1415ce93d..6322f126fad5d6c60b17cb2ccc6fda2db5d382ef 100644 (file)
@@ -856,6 +856,7 @@ typedef enum
  * @GTK_STATE_FLAG_DIR_RTL: Widget is in right-to-left text direction. Since 3.8
  * @GTK_STATE_FLAG_LINK: Widget is a link. Since 3.12
  * @GTK_STATE_FLAG_VISITED: The location the widget points to has already been visited. Since 3.12
+ * @GTK_STATE_FLAG_CHECKED: Widget is checked. Since 3.14
  *
  * Describes a widget state. Widget states are used to match the widget
  * against CSS pseudo-classes. Note that GTK extends the regular CSS
@@ -874,7 +875,8 @@ typedef enum
   GTK_STATE_FLAG_DIR_LTR      = 1 << 7,
   GTK_STATE_FLAG_DIR_RTL      = 1 << 8,
   GTK_STATE_FLAG_LINK         = 1 << 9,
-  GTK_STATE_FLAG_VISITED      = 1 << 10
+  GTK_STATE_FLAG_VISITED      = 1 << 10,
+  GTK_STATE_FLAG_CHECKED      = 1 << 11
 } GtkStateFlags;
 
 /**
index 83ff4fdfbbe40ac0a36292b890a6f5d80c640574..d2cf6b15447534c75a7be059082f532c762fcc83 100644 (file)
 
 #define WIDGET_CLASS(w)         GTK_WIDGET_GET_CLASS (w)
 
-#define GTK_STATE_FLAGS_BITS 11
+#define GTK_STATE_FLAGS_BITS 12
 
 typedef struct {
   gchar               *name;           /* Name of the template automatic child */
index aeb2980fe7441c37ef61a0ab7ee7c3616156ab3f..7d1019980bf280e9c4c924ecafe6f5721b190940 100644 (file)
@@ -333,18 +333,14 @@ gtk_widget_path_to_string (const GtkWidgetPath *path)
         {
           GFlagsClass *fclass;
           gint i;
-          gboolean appended;
 
-          appended = FALSE;
           fclass = g_type_class_ref (GTK_TYPE_STATE_FLAGS);
           for (i = 0; i < fclass->n_values; i++)
             {
               if (elem->state & fclass->values[i].value)
                 {
-                  if (appended)
-                    g_string_append_c (string, ':');
+                  g_string_append_c (string, ':');
                   g_string_append (string, fclass->values[i].value_nick);
-                  appended = TRUE;
                 }
             }
           g_type_class_unref (fclass);
index 363c7e06ff7a4a30ed81ea503efa5d92b2d0c316..53f8c7184444ca5bfdf60ad8d0485c9297a8084a 100644 (file)
@@ -49,3 +49,7 @@
 :visited {
   color: red;
 }
+
+:checked {
+  color: red;
+}
index 416411feb5d710b2132aecba4256768b70c0bc2d..ee006991544cde8afec0b550810ea963ae12925e 100644 (file)
@@ -49,3 +49,7 @@
 :visited {
   color: rgb(255,0,0);
 }
+
+:checked {
+  color: rgb(255,0,0);
+}